package com.sunqizhong.controller;

import com.sunqizhong.entity.Dept;
import com.sunqizhong.entity.Result;
import com.sunqizhong.service.DeptService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//请求处理类
@Slf4j //会自动生成log对象，用于打日志
@RequestMapping("/depts")
@RestController
public class DeptController {
    /*
    * 班级列表查询
    * */
    @Autowired //自动从IOC容器中，自动寻找bean对象，为该变量赋值--依赖注入的实现【根据类型注入】
    private DeptService deptService;
    @GetMapping //限制请求方式为Get
    public Result getAll(){
        //1、调用service获取数据
        List<Dept> depts = deptService.list();
        //2、响应数据
        return Result.success(depts);
    }

/*    //原始方式获取请求参数
    //@RequestMapping(value = "depts",method = RequestMethod.DELETE)
    @DeleteMapping("/depts")
    public Result delete(HttpServletRequest request){
        String id = request.getParameter("id");
        int idInt = Integer.parseInt(id);

        System.out.println("id=" + idInt);
        return Result.success();
    }*/

    //方式二：通过spring提供的@RequestOaram注解获取请求参数
    //@RequestParam加上之后，required默认值为true代表前端就必须要传递该参数，否则报错400，Bad Request,如果不需要限制，可以将默认值设置为false
    @DeleteMapping
    //public Result delete(@RequestParam(value = "id",required = false) Integer deptId){
    //方式三：请求参数名和形参变量名相同，可以直接定义方法形参即可接收
    public Result delete(Integer id){
        //System.out.println("depId = " + id);
        log.info("id = {}",id);
        //调用service的删除方法
        deptService.delete(id);
        return Result.success();
    }

    /*
    * 新增部门
    * @RequestBody 作用：用来接收json格式
    * */
    @PostMapping
    public Result save(@RequestBody Dept dept){
        System.out.println("dept = " + dept);
        //调用service
     //   try {
            deptService.save(dept);
     //   } catch (Exception e) {
           // return Result.error("出错了，请联系管理员！！");
       // }
        return Result.success();
    }

    /*
    * 回显
    * @PathVariable 作用：用于接收路径参数值
    * */
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        //System.out.println("id = " + id);
        log.info("id = {}",id);
        //调用service方法
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    /*
    * 修改部门
    * */
    @PutMapping
    public Result update(@RequestBody Dept dept){
        //System.out.println("dept = " + dept);
        log.info("id = {}",dept);
        deptService.update(dept);
        return Result.success();
    }
}
